今天我們來研究 **kwargs:
def func(**kwargs):
print(kwargs)
func(x=100, y=200)
{'x': 100, 'y': 200}
**kwargs 是關鍵字引數的蒐集器,將它們蒐集在一個字典中。
我們可以把它跟 *args 一齊使用:
def func(*args, **kwargs):
print(args)
print(kwargs)
func(1, 2, a=100, b=200)
(1, 2)
{'a': 100, 'b': 200}
然而下面的寫法會出錯:
def func(*, **kwargs):
print(kwargs)
Input In [6]
def func(*, **kwargs):
^
SyntaxError: named arguments must follow bare *
單個星號表示接下來都是關鍵字引數,這跟 **kwargs 的意義重複,所以你也不需這麼寫。
def func(a, b, **kwargs):
print(a)
print(b)
print(kwargs)
func(1, 2, x=100, y=200)
1
2
{'x': 100, 'y': 200}
**kwargs 的後面也不能再定義參數:
def func(a, b, **kwargs, c):
pass
Input In [9]
def func(a, b, **kwargs, c):
^
SyntaxError: invalid syntax
如果你想同時定義一個關鍵字參數和 **kwargs,需要先 exhausted 位置參數,然後定義你要的關鍵字參數和 **kwargs:
def func(*, d, **kwargs):
print(d)
print(kwargs)
func(d=1, x=100, y=200)
1
{'x': 100, 'y': 200}
好啦,明天我們會把這幾天學到的參數/引數知識綜合運用,我們明天見~
參考:Python 3: Deep Dive (Part 1 - Functional)